#pragma once

/**
*
*/
#define MT_RANDOM_N 624
#define MT_RANDOM_M 397

class __declspec(novtable) CRandomMT
{

protected:
	const static unsigned long MATRIX_A;   /* constant vector a */
	const static unsigned long UPPER_MASK; /* most significant w-r bits */
	const static unsigned long LOWER_MASK; /* least significant r bits */

	static unsigned long mt[MT_RANDOM_N]; /* the array for the state vector  */
	static int mti; /* mti==N+1 means mt[N] is not initialized */

protected:
	CRandomMT();

public:
	static unsigned long GetRand();
	static unsigned long GetRand(unsigned long range);
};
